<html>
<body>
报告将非安全对象传递给带形参的方法的情况，该方法使用 <code>@Untainted</code> 注解标记、从注解的方法返回，或被分配给注解的字段、形参或局部变量。 不支持将字段的 Kotlin <code>set</code> 和 <code>get</code> 方法作为入口点。
<p>
  （相同类中的）安全对象为：
<ul>
  <li>字符串字面量、接口实例或枚举对象</li>
  <li>对标记为 <code>@Untainted</code> 的方法进行调用的结果</li>
  <li>private 字段，仅使用字符串字面量赋值，并具有安全的初始值设定项</li>
  <li>final 字段，具有安全的初始值设定项</li>
  <li>标记为 <code>@Untainted</code> 且不是从非安全对象赋值的局部变量或形参</li>
  此字段、局部变量或形参不得作为实参传递给方法或用作限定符，或者必须是基元、其包装器或不可变对象。
</ul>
此外，static final 字段也被认为是安全的。
<p>
  该分析仅在一个文件内执行。 要处理来自其他类的依赖项，请使用选项。
  分析会扩展到 private 或 static 方法，并且具有深度传播限值。
<p>
  示例：
<pre>
<code lang="java">
  void doSmth(boolean b) {
    String s = safe();
    String s1 = "other";
    if (b) s1 = s;
    sink(s);
  }

  String sink(@Untainted String s) {}
</code>
</pre>
<p>
  此处没有将非安全字符串赋值给 <code>s</code>，因此没有产生警告。 另一方面：
<pre>
<code lang="java">
  void doSmth(boolean b) {
    String s = safe();
    String s1 = "other";
    s1 = foo();
    if (b) s = s1;
    sink(s);        // 此处为警告
  }
  
  String foo();

  String sink(@Untainted String s) {}
</code>
</pre>
<p>
  这里有一条警告，因为 <code>s1</code> 在 <code>foo</code> 调用结果赋值后具有未知状态。
  <!-- tooltip end -->
<p><small>2021.2 最新变化</small></p>
</body>
</html>
